<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <!-- 
        需求1：定义一个v-big指令，和v-text功能类似，但会把绑定的数值放大10倍。
        需求2：定义一个v-fbind指令，和v-bind功能类似，但可以让其所绑定的input元素默认获取焦点。

        自定义指令总结：
            一、定义语法：
                (1).局部指令：
                    new Vue({new Vue({directives：{指令名：配置对象} 或 directives{指令名：回调函数}))
                (2).全局指令：
                    Vue.directive（指令名，配置对象）或 Vue.directive（指令名，回调函数）
            二、配置对象中常用的3个回调：
                 (1).bind：指令与元素成功绑定时调用。
                 (2).inserted：指令所在元素被插入页面时调用。
                 (3).update：指令所在模板结构被重新解析时调用。
            三、备注：
                1.指令定义时不加V-，但使用时要加V-；
                2.指令名如果是多个单词，要使用kebab-case命名方式，不要用camelcase命名，记得加引号。
    -->
    <div id="root">
        <h2>{{name}}</h2>
        <h2>当前n的值是：<span v-text="n"></span></h2>
        <h2>放大10倍后n的值是：<span v-big="n"></span></h2>
        <button @click="n++">点我n+1</button>
        <hr>
        <input type="text" v-fbind:value="n">
    </div>
    
</body>
<script>
    // 全局指令定义类似于过滤器
    Vue.directive('fbind',{
        //指令与元素成功绑定时
        bind(element,binding) {
            element.value=binding.value
        },
        //指令所在元素被插入页面时
        inserted(element,binding) {
            element.focus()
        },
        //元素更新时
        update(element,binding) {
            element.value=binding.value
            element.focus()
        }
    })
    
    new Vue({
        el:'#root',
        data() {
            return {
                name:'lee',
                n:1
            }
        },
        directives:{
            // big函数什么时候调用？
            // 1.指令与元素成功绑定时（一上来）
            // 2.指令所在模板被重新解析时
            big(element,binding) {
                // 这里面的this是windows
                element.innerText=binding.value*10
            },
            fbind:{
                //指令与元素成功绑定时
                bind(element,binding) {
                    element.value=binding.value
                },
                //指令所在元素被插入页面时
                inserted(element,binding) {
                    element.focus()
                },
                //元素更新时
                update(element,binding) {
                    element.value=binding.value
                    element.focus()
                }
            }
        }
    })
</script>
</html>